package ig.metrica.ui.conexion;

import java.util.ArrayList;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import ig.metrica.origenesdedatos.Conexion;
import ig.metrica.origenesdedatos.ConexionHome;
import ig.metrica.origenesdedatos.ConexionPK;
import ig.metrica.ui.WizzardSevinproPanel;
import ig.util.ConexionServer;
import ig.util.ejb.IGBean;
import ig.util.ejb.IGLlaveInt;
import ig.util.excepciones.DatoInvalidoExcepcion;
import ig.util.excepciones.LogicaExcepcion;
import java.awt.Dimension;
import javax.swing.JFrame;

public class PantallaConexion extends WizzardSevinproPanel{
	
	private PantallaDatosBasicosConexion datosbasicos;
	private ConexionHome home;
	private Conexion conexion;
	
	public PantallaConexion(JFrame frame) throws Exception{
		super(null);
        this.frame = frame;
		ArrayList pantallas = new ArrayList();
		pantallas.add( datosbasicos = new PantallaDatosBasicosConexion(frame) );		
		pantallaBusqueda = new PantallaBusquedaConexion( new PantallaDatosBasicosConexion(frame), this );
		setPantallasWizzard( pantallas, pantallaBusqueda);
        setPreferredSize(new Dimension(700, 300));
	}

	protected void adicionarRegistro() throws Exception {
		
		if ( datosbasicos.getNombre().trim().equals("") || datosbasicos.getDriver().trim().equals("")
				|| datosbasicos.getURL().trim().equals("") || datosbasicos.getUsuario().trim().equals("") ){
			throw new DatoInvalidoExcepcion("Debe registrarse informacion en todos los campos de la pantalla.");
		}
		
		Properties prop = new Properties();
		prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
		
		String Sockec = new ConexionServer().getSocketServer(); 
		prop.put( Context.PROVIDER_URL, Sockec);
		
		InitialContext ctx = new InitialContext(prop);
			
		home = (ConexionHome)ctx.lookup("ig.metrica.origenesdedatos.Conexion");
		conexion = home.create( datosbasicos.getNombre(), datosbasicos.getDriver(), datosbasicos.getURL(), datosbasicos.getUsuario(), datosbasicos.getPassword() );
		llaveRegistro = new Long[] { ((IGLlaveInt)conexion.getPrimaryKey()).getIdInterna() };
	}

	protected void editarRegistro() throws Exception {
		if ( datosbasicos.getNombre().trim().equals("") || datosbasicos.getDriver().trim().equals("")
				|| datosbasicos.getURL().trim().equals("") ){
			throw new DatoInvalidoExcepcion("Editar: Debe registrarse informacion en todos los campos de la pantalla.");
		}
		
		conexion.setNombre( datosbasicos.getNombre() );
		conexion.setDriver( datosbasicos.getDriver() );
		conexion.setUrl(datosbasicos.getURL());
		conexion.setUsuario(datosbasicos.getUsuario());
		conexion.setPassword(datosbasicos.getPassword());
	}

	protected void eliminarRegistro() throws Exception {
		conexion.remove();	
	}
	
	protected void cargarRegistro() throws Exception {
                setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
		if (llaveRegistro==null){
			throw new LogicaExcepcion("No es posible realizar la carga del registro con una llave nula");
		}
		
		Properties prop = new Properties();
		prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
		String Sockec = new ConexionServer().getSocketServer(); 
		prop.put( Context.PROVIDER_URL, Sockec);
		
		InitialContext ctx = new InitialContext(prop);
		
		home = (ConexionHome)ctx.lookup("ig.metrica.origenesdedatos.Conexion");
		conexion = home.findByPrimaryKey( new ConexionPK( ((Integer)llaveRegistro[0]).intValue() ) );
		
		datosbasicos.setNombre( conexion.getNombre() );
		datosbasicos.setDriver( conexion.getDriver() );
		datosbasicos.setURL( conexion.getUrl() );
		datosbasicos.setUsuario( conexion.getUsuario() );
		datosbasicos.setPassword( conexion.getPassword() );
                setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));		
					
	}

    protected void salir() {
    }

    protected void nuevo() {
        btnEditar.setEnabled(false);
        new DDriver(datosbasicos.frame,true,datosbasicos);
    }

}
